(function () {
    /* 
        abstract class xxx{} 抽象类
            抽象类和其他类不同，无法创建实例对象
            抽象类是专门用来被继承的类（用于父类）
     */

    abstract class Animal {
        name: string;
        constructor(name: string) {
            this.name = name;
        };
        // sayHello() {
        //     console.log("动物叫~~~ ")
        // }
        /* 
            abstract xxx(){}  抽象方法
                抽象方法使用abstract开头，没有方法体
                抽象方法只能定文在插象类中，子类必须对抽象方法重写
        */
        abstract sayHello(): void;
    }


    class Dog extends Animal {

        sayHello(): void {
            console.log("汪汪汪~~~");
        }
    }

    class Cat extends Animal {
        // 报错 非抽象类“Cat”不会实现继承自“Animal”类的抽象成员“sayHello”

        // 重写sayHello()抽象方法
        sayHello(): void {
            console.log("喵喵喵~~~");
        }
    }


    const myDog = new Dog("小黑");
    myDog.sayHello();
    // const animal = new Animal()  // 报错 无法创建抽象类的实例

})()